{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 聚类\n",
    "\n",
    "熟悉各中聚类算法的调用\n",
    "并用评价指标选择合适的超参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#导入必要的工具包\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.cluster import MiniBatchKMeans\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn import metrics\n",
    "\n",
    "from sklearn.decomposition import PCA\n",
    "import time\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#读取训练数据\n",
    "train = pd.read_csv('./data/MNIST_train.csv')\n",
    "\n",
    "n_trains = 1000\n",
    "y_train = train.label.values[:n_trains]\n",
    "X_train = train.drop(\"label\",axis=1).values[:n_trains]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#将像素值[0,255]  --> [0,1]\n",
    "X_train = X_train / 255.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the shape of train_image: (1000, 784)\n"
     ]
    }
   ],
   "source": [
    "# 原始输入的特征维数和样本数目\n",
    "print('the shape of train_image: {}'.format(X_train.shape))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1000, 32)\n"
     ]
    }
   ],
   "source": [
    "#对数据进行PCA降维\n",
    "pca = PCA(n_components=0.75)\n",
    "pca.fit(X_train)\n",
    "\n",
    "X_train_pca = pca.transform(X_train)\n",
    "\n",
    "# 降维后的特征维数\n",
    "print(X_train_pca.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/qing/anaconda2/lib/python2.7/site-packages/sklearn/model_selection/_split.py:2026: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "# 将训练集合拆分成训练集和校验集，在校验集上找到最佳的模型超参数（PCA的维数）\n",
    "X_train_part, X_val, y_train_part, y_val = train_test_split(X_train_pca,y_train, train_size = 0.8,random_state = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(800, 32)\n",
      "(200, 32)\n"
     ]
    }
   ],
   "source": [
    "#拆分后的训练集和校验集的样本数目\n",
    "print(X_train_part.shape)\n",
    "print(X_val.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 一个参数点（聚类数据为K）的模型，在校验集上评价聚类算法性能\n",
    "def K_cluster_analysis(K, X_train, y_train, X_val, y_val):\n",
    "    start = time.time()\n",
    "    \n",
    "    print(\"K-means begin with clusters: {}\".format(K));\n",
    "    \n",
    "    #K-means,在训练集上训练\n",
    "    mb_kmeans = MiniBatchKMeans(n_clusters = K)\n",
    "    mb_kmeans.fit(X_train)\n",
    "    \n",
    "    # 在训练集和测试集上测试\n",
    "    #y_train_pred = mb_kmeans.fit_predict(X_train)\n",
    "    y_val_pred = mb_kmeans.predict(X_val)\n",
    "    \n",
    "    #以前两维特征打印训练数据的分类结果\n",
    "    #plt.scatter(X_train[:, 0], X_train[:, 1], c=y_pred)\n",
    "    #plt.show()\n",
    "\n",
    "    # K值的评估标准\n",
    "    #常见的方法有轮廓系数Silhouette Coefficient和Calinski-Harabasz Index\n",
    "    #这两个分数值越大则聚类效果越好\n",
    "    #CH_score = metrics.calinski_harabaz_score(X_train,mb_kmeans.predict(X_train))\n",
    "    CH_score = metrics.silhouette_score(X_train,mb_kmeans.predict(X_train))\n",
    "    \n",
    "    #也可以在校验集上评估K\n",
    "    v_score = metrics.v_measure_score(y_val, y_val_pred)\n",
    "    \n",
    "    end = time.time()\n",
    "    print(\"CH_score: {}, time elaps:{}\".format(CH_score, int(end-start)))\n",
    "    print(\"v_score: {}\".format(v_score))\n",
    "    \n",
    "    return CH_score,v_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K-means begin with clusters: 10\n",
      "CH_score: 0.0861136028139, time elaps:0\n",
      "v_score: 0.467310844259\n",
      "K-means begin with clusters: 20\n",
      "CH_score: 0.1019430768, time elaps:0\n",
      "v_score: 0.613937221159\n",
      "K-means begin with clusters: 30\n",
      "CH_score: 0.100814152114, time elaps:0\n",
      "v_score: 0.611520356123\n",
      "K-means begin with clusters: 40\n",
      "CH_score: 0.116164079876, time elaps:0\n",
      "v_score: 0.641454033828\n",
      "K-means begin with clusters: 50\n",
      "CH_score: 0.0993658200202, time elaps:0\n",
      "v_score: 0.618867579767\n",
      "K-means begin with clusters: 60\n",
      "CH_score: 0.101820723612, time elaps:0\n",
      "v_score: 0.646560684508\n"
     ]
    }
   ],
   "source": [
    "# 设置超参数（聚类数目K）搜索范围\n",
    "Ks = [10, 20, 30,40,50,60]\n",
    "CH_scores = []\n",
    "v_scores = []\n",
    "for K in Ks:\n",
    "    ch,v = K_cluster_analysis(K, X_train_part, y_train_part, X_val, y_val)\n",
    "    CH_scores.append(ch)\n",
    "    v_scores.append(v)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a16bcd790>]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nxnB5ugAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a16afef90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制不同PCA维数下模型的性能，找到最佳模型／参数（分数最高）\n",
    "plt.plot(Ks, np.array(CH_scores), 'b-')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x113181e10>]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\niIgIAP8fZDTFKpy09a4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110b61a90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(Ks, np.array(v_scores), 'g-')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "两个指标的变化趋势类似"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAD8CAYAAACSCdTiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3XlclNX+wPHPmYGZYRFlE0QBQcUt\nzRTLFteU0mw1LUuzrOzetNvvtl/Lm1bW9ept1Vu3ulamlW3aYtly09wNxCWV3EAEBERUwIV1zu+P\nB5BlBmbgwRngvF+veanDzPMcCr7PM9/zPd8jpJQoiqIoLZPB1QNQFEVRmo4K8oqiKC2YCvKKoigt\nmAryiqIoLZgK8oqiKC2YCvKKoigtmC5BXgjRTgjxuRDiDyFEkhDicj2OqyiKojSOh07HeQ1YLaW8\nVQhhArx1Oq6iKIrSCI2+kxdC+AFDgP8CSCmLpZSnGntcRWkIIeglBDuE4KwQHBeC+a4ek6K4kmjs\nilchRD/gbWAvcDGwDXhYSnmmxuumAdMAfHx8BvTo0aNR51UUW86e7U5BQSx+fpvIyZlATs54unX7\nE35+Ca4emqI02rZt245LKYOdeY8eQT4W2AJcKaXcKoR4DciXUs6y957Y2FiZkKB+6ZSm9cUXcOut\n8Nln2p+K0twJIbZJKWOdeY8eE6/pQLqUcmv5vz8H+utwXEVpsLw8mDMHunaFMWNcPRpFcZ1GB3kp\nZRaQJoToXv7U1WipG0Vxibw8iIuD3FxYvRq8VRmA0orpVV3zELCsvLImGbhHp+MqilPy82HUKDh4\nEL78Esxm7Tk/P1ePTFFcQ5c6eSnlDillrJSyr5TyJinlST2OqyjOSkyE+Hg4eRKGD4fwcHj5ZVeP\nSlFcR687eUVxC8OGgdoiQVHOU0FeaZCSNMj9F5QeBWEGn6uh3d2uHpWiKDWp3jVKg8hi8B4GIf8C\nryuhYCUU7nL1qBRFqUndySsNYuqiPQAsfeHMarCedu2YFEWpTd3JK41iPQP5y8GjA1gGuHo0iqLU\npO7klQaznoGc2WAtgPZzwWB29YgURalJ3ckrDWI9qwX40kwI+CvgqT2nKIp7UXfySoMUH4LiA9rf\nc8q7FPndBm0num5MiqLUpoK80iCWPhC+0tWjUBSlPipdoyiK0oKpIK8oitKCqSCvKIrSgqkgryiK\n0oKpIK8oitKCqSCvKIrSgqkgryiK0oKpOvlWQLUFVpTWS93JtwKqLbCitF7qTr4VUG2BFaX1Unfy\nrYhqC6worY+6k28lVFtgRWmd1J18K6DaAitK66Xu5FsB1RZYUVovFeRbAdUWWFFaL5WuURRFacFU\nkFcURWnBVJBXFEVpwXQL8kIIoxBiuxDiW72OqSiKojSOnhOvDwNJgJ+Ox1QU3ZwsKeHyxEQOFxbi\nZTRyXUAA73bvjsVodPXQFKXJ6HInL4ToBFwHvKvH8RSlKXgKwdzoaHYPHMh9HTqw7NgxVp044eph\nKUqT0utO/lXgCaCNTsdTFN35engwLjgYgAizGbMQxHh5uXhUitK0Gh3khRBjgWNSym1CiGF1vG4a\nMA0gIiKisadVlAZZf+oUcbt2UWi1EufvT5TF4uohKUqT0iNdcyVwgxDiMPAJMEIIsbTmi6SUb0sp\nY6WUscHld1OKcqHFtmnD9gEDeL5zZ348eZLFWVmuHpKiNKlGB3kp5d+klJ2klJ2B24FfpJSTGj0y\nRanL3r3Qrx94e0NQEDz+eL1v2VFQwMa8PEwGAz7lk63eBlVFrLRsqq2B0uzs3QvP3VRI55TJrPMZ\nzYJOC7liwQIYPRpGjLD7vmMlJdy/bx+ZxcUEeHgwPSyMKaGhF3DkinLh6RrkpZRrgbV6HlNRaios\nhIEP9Gf06P7kL4R/vXk1V/Am1FMpExcQQOrll1+gUSqKe1B38kqz07+/9gC4ZlAeUW/OoSC0K23G\njHHtwBTFDamEpNJs5R3JI/pPcbQ35uLx02otP98anDwJPXqAxQL+/jBpkvbxRlFsUEFeaZby0vJJ\n7zWKToUHKPtgGV7tzJCf7+phXRienjB3LuzeDffdB8uWwapVrh6V4qZUkFeanfx8eHJUIr3PxOMv\nT9Jx0nAID4eXX3b10C4MX18YNw66doWICDCbISbG1aNS3JTKydsgS+HY09qOSpRCh/+AR4irR6VU\nSEyE/+wbxn+Qlc89+yzMnu26MV1w69dDXJyWpomLg6goV49IcVPqTt4WAV6x4HWpqwfSupw8eZIe\nPXpgsVjw9/dn0qRJFNrINQ8bBlJWf7SqAA8QGwvbt8Pzz8OPP8Lixa4ekeKmVJAvJ0sh+0lIuxXS\nx4H3EPDs6OpRtS6enp7MnTuX3bt3c99997Fs2TKWL1/uUOBvVXbsgI0bwWQCHx/tudYy6aw4TQX5\nCuru3SF79+6lX79+eHt7ExQUxOMOrDR1lK+vL+PGjaNr165ERERgNpvp0aNHrcC/qrVPMh47Bvfe\nq1XYzJsH06fDlCm1XibWrq322FFQ4ILBKq6mgnw5YQS/8eruvT6FhYVMnjyZhIQEJkyYwIIFC/jl\nl190O/769evx8vLiL3/5C0OHDqV3797VA7/JRMzMmU61M2hx4uIgNRWKiyErCxYu1CpubHi5SxfS\nBg0ibdAgelfc9SutigrydpRkQVn5jU9pFpQ52Xa8avon7SYozdZ/jK7Qv39/Hn30UXr16sXVV18N\nwAkde7LHxsayfft2nn/+eX788UcWL15cPfD370/UlCmQkAATJsCCBaDjRaalmXP4MJclJjL3yBFX\nD0VxERXkqR6Q8z/Tnjv+LJxZrf0951k49aGTB23h6Z+8vDzmzJlD165dGaPTStMdO3awceNGTCYT\nPuV3nd7e3tUD/5YtLPb1hV69oPwiU187g9ZqUbdu/HrJJTzYsSNvHT3K25mZrh6S4gKqhBIqA7Lw\ngqId2lPBc8AzHIwBDTxkefonbxmc02+kbiEvL4+4uDhyc3NZt24d3jpN+h07doz777+fzMxMAgIC\nmD59OhdffDEbN24kOjq6WuAnLw/mzNFqxe1cZFr7dn8PdtRyj928vHgmJYVdp0+7eESKK6g7ec4H\n5IoADw28e3ehkjTI+j9InwAZk+HU+01znvz8fEaNGsWBAwdYtmwZZrOZ337Ld7brr01xcXGkpqZS\nXFxMVlYWCxcu5OTJk9x777306NGDefPmMX36dKbcdJOWl87N5cAbq+l3hbfNc7fm7f62FRSw4MgR\nks6c4d8ZGQD09fV18agUV1B38lX4jdfSNc1x8ZMsBu9h4DUAClZBwUqw9AdLX33Pk5iYSHx8PADD\nhw8HYNq0Z5k8eTajR2tzgA50/XVYReCvlJ8PI0fCwYPw5ZcUnjNz7/h8rr7Zr9a53WW7P7F2bbV/\nbx8wgH5tmnanTF+jkY+OHWPW4cP4Go08GBbGAx06NOk5FfekgnwTKkmvPnkrPBue/jl58iSXX345\nhw8fxsvLi+uuu453330XS/n2daYu2gO0wH5mNVib4NP5sGHDkFLa/frVV8Ob9Xf9bbjERCi/yDB8\nOH2APs8+C71m2zy3u2z393KXLowvv+CEmExNfr7u3t4kxsY2+XkU96fSNeVK0qE0T/t75oNaRUzJ\n0cZVyGTNaOTkbRW2FgrZqhe3noH85eDRASwDGn6+qhzdhMmBNHnj2Vnuau/c7rLdn6pyUVxF3cmX\ny5pR5R9l5X+WT8gaA+HcJuePGb5Sj5FpKhYKAZULhWJqNKWynoGc2WAtgPZzwWDW59yFhTB5MnWm\nY/LyKtPkrFt3YRdg2jv3joICjpeUEO3l5dLt/hZ168aVbdvybW4uz6SkcJGPD9M7qgUZyoWhgny5\nqgE5b5mWmxcG96qQWb9+PXFxcRQWFhIXF0dUlaZU1rNagC/NhMAnAU/tOYMOwbbqJh22UiL5+TBq\nVGWaHHN5118/v8afuz51ndtdtvtTVS6KK6l0TTNia6FQheJDUHxAy8PnzILM+6DgK33Pby8lUpEm\nP3kShl/grr91nbtiu7/ioUPJuvJKFsbE4HmB7+RVlYviaupOvpnYsWMHx48fr10vXs7SR9/0UE11\npWMq0uSu4MpzO0JVuSiu1mqCvKM94mtWxJQe169CpjFsLRSaYqMpVVNwZTqmuVNVLoqribrK4ZpK\nbGysTEhIuKDnlGVQ8CUUp2iTqPaCfNpNdR/HezgEPuzEeVvABiRr12qpkKpa3SYdiuIGhBDbpJRO\n3TW0mjt5R9sM6J7yaGSFDmgljHfcAfv3a2mSe+6B+fP1HWZd3C0l4orFRYrSXKmJ1yamRwvjihJG\n1XjxvJbYQtep/u+OLl5QWj0V5N2Ivd/b/v3h0Ufdp/GiO8SXlrq4yOGLl7ryKw5qVUG+1qRqTvmK\n1nFaLt7Vvd/r+711dEVpU+7e5Mg4m1pLbqHr8MXL3a78ittqVUG+ZpuBvGVavtxS3vPdcnHTnLfm\nxcXeBiR1/d5WLWFcvbruFaVNvXuTq+PLgx07crGvL3/t1AmgxSwuatDF64L0klCas1YV5MNXQqfP\nwdQd8ICza7UNu01arMCjfdOc19keNjV/bytKGA8cgGXLzpcw2tPUuzfZG2eFkydPNtnm2y15cZHT\nFy9nrvxKq9XoIC+ECBdCrBFCJAkh9gghnCgwdAEHdmwaN+4WzGYzQggOHz5s93WyBHJfhfQ7IX0i\n5LyotRKoKXxl9UddJZi2fm8buqK0KXZvqmucFRxtptYQFYuL+m/bxry0tBazuMjpi5ezV36l1dKj\nhLIUeFRKmSiEaANsE0L8JKXcq8OxdVdXKWWZLAOM7Ni5k+Li4nqPVZiofRpocysY/eHUO3Dmf9Dm\n+oaNzd6io4aUMDbV7k32xnn6t734TtPqPH29vRl3zz0wbpzdZmoN1VIXFzm9MrZGy2VALV5QbGr0\nnbyUMlNKmVj+9wIgCWg2LfaqbthtzREATLpmCu3N9TeyMoYAHmBsdz7VIxzck6I4GbL/Bum3wdGp\nULRXvx4wtnZvytfxLs/WOJf9t/ps7PoFC/Aym7XNt4cOrdZMzdWcqg66QKVEFRevc0OGkHPllSyK\nicGjrj47dlouK0otUkrdHkBn4AjgZ+Nr04AEICEiIkK62qmlUh650f7jX5e8JwGZkpJi9xjWIimP\nzS1/z01SZv9NSmtp/ecuOytl+l1SZj0lZVGKlGe3Sll0ULdvTa5Zs0YC1R7PPvus3LNHyosvltLL\nS8rAQCkfe0y/c1bz+efyLMikV1+Vzz//vATka6+91kQnc962bVIuWCDlnj1S/vnPWoT83//0eLGi\nNC0gQToZl3WbeBVC+AJfAP8npax12yilfFtKGSuljA0u3yHHVapWuwTPgbDF1XPm/7noGR7dfk+9\nxznzCxT+Bm0nQeAj2t14wTf1n78wAax50G4SmDpr8wMVuzrpoWL3pqqP2bNnN6j00elJ1Lw8djz1\nFBvDwjCNHGmzmVqj7dgBV10FPj6kdL2Ep//0Lnfcuoj7p7xL0p6Met/uVHWQq0uJFKWRdAnyQghP\ntAC/TEr5pR7HbEr1VbscP3688u+HDh0i014pmyj/wwR4an8vy63//KU52p+nPoSMKXDs2QtTm9+Q\neOXUJGr5bOyxEye4F+hxySXnN9/Wq5laQQFccw0A59au5/n+U8Fo5MX5E5j24AjMZs/Kl9aXaXGq\n+lCVKirNlbO3/jUfaKFuCfCqo+8ZMGBAE3yQcZy1RMqsJ6Q8Mk5LtZRknf9aUlJSrVTHlClTbB6n\nrFDKnPlSpk2UMu02KbOfkbIkp/7zF/yonffEf6U8t1vKIzdLeXyBPt+bI06dkrJPHym7dpXyzBnH\n3/f6669Ls9ksd+3aVfuLeXlSDhwopb+/lGvWSJmWpj2nt48/1lImcXFyfder5C1jX5V7rp9s81x1\nZVpOnZLy0kulDAuTMvX7evJYVV98UMe8mqI4CRela64EJgMjhBA7yh9ue6tT2RXyAFpdUA09e/as\n9u8pU6bw/vvv2zyWwQxBj0Gnj6DTJ9D+efAIqn8MlosBD61tsfAERPmnAQdVTaG0a9eO4ODgypJP\ns9lcZ1qlIaXV69evx8vLq+5J1LpmjfWcvExN1f788UdyPLQSw6W5/txz93vMmfUlx7LPZwrtfXKp\nVX0oCykcbyePpUoVm71FGRlEbN5M6MaN/D0lpc6N6FsiPaprNkgphZSyr5SyX/njOz0G1yQq6uQH\n2f5yzaugvQDfGB7tIeAvcHYD5PxdC/ptJzn+/qoplHvvvZfjx4/Tr18/AH744Qe7aZWGxqvY2FjW\nrl1LUFAQP/74I+3bt699Eamr2kPPPgiBgdqfBgNtBml7EsacTOWxQV7s3pXOsiUba72lZqal5vUo\ndEx//lFS/Wqw6OxZLTAkJvL3iy5CumLbK6XRthUUMOPAAWZ07MiCLl14PjWVFVXSsa1Bq1rxCvp0\nhdSDzxAI+4/2CSD471qdvaMqNvXu2rUrnTt3xmw2c/HFWk+Gzp07261Nb0iJ5o4dO9i4cSPe3t5c\nd911AAwePNi5BU56Tl6OGgWenhAdTd/lb+JhLcXD24zp+rEIITCZqy/9sPXJxe71qPxqsG3ECGb4\n+mqBoUcPnr/rLlYcO6ZKFZuhr8sD+tTQUO4MCcHHYOCrVhbkW00/+Zam5qbe7dq1A6B79+4UFxfX\n2ugbGrao6tixY9x/991kZmURICXTzWa6Fhfza0MWOOkxeRkZqX0qWLyY9iYTM05u5GO/3nz/1Kf0\nvaQzd0y+ovKlTu1oVeVq8PX770N+PlNDQwn09ORP+/fz1fHj3OLiqrDWZFFGBvOOHKHYamVaWBhz\nOndGCOH0cbLLFzW28fBACIGv0Vj5XGvR6u7kK5RVSVNUbRpWUlLCFVdcUZnjHjBggEMtDi60mpt6\n79y5E4DvvvvO5kbf9rz/PghR/TF16vmvx8XFkfrttxTPn89nS5bw39JS/rp2LUP79Kl2EVm0aBER\nERGEhoby97//vXbes0oQPfDGavpd4d3wFP1ll2l/zpvH4Cfu4t9rXmBZdCrPzL4Jf//z7Xkd/uRS\nI49VUejUmgODK+mZYgkxaZNd+aWlSCkpKCurfK61aJVBviQdzvxw/t9VyyiFEIwdO5Ybb7wRgBEj\nRlT+3enz1Lhg6HWRqEihmEymyjr03FytdvPo0aOUlZUB52vTi4qKuOuuu/D398fPz48bb7yxcgXs\nhAmQlqY9Xn9dO/6oUTVOWJ5uib31Vra//DLPAz8mJFReRLZt28aMGTOYMWMGCxYsYM/2QG694XXG\nXf8a465/jZRdKdWCaKE0c+/4/Ian6CdPhttu09ImkybBiBFaOqgGhxeF1rgahLzxBgD5e/ci+/Wj\noKCAkBUr1MYcF4ieKZax5XM472VlsSw7m7NWK9dXzOu0Fs6W4+jxcHUJZc3Vrcdfrf2ap59+unLF\na9W/O6OkpETOnTtXjh8/vkHvt+eHH36QERER0tPTU4aEhNQq+bRYLHL69OmyuLhYSinlypUrJSBn\nzpwp33jjDQnIV1+t/U0PHSplSIiURUW1z7l9+3b508qV8lD37vLloCAJyHfeeUdKKeXf//53Ccic\nnBxptVrlLWNflbdPeEwez8mXx3PyZcnPv9SMtVI++6yUUsrPP9f++dlnuvyn0cVveXmSNWvkvE2b\n5IeLF0vWrJGfzZ2rVrteIA/88YdkzRpZWFYmpZQyZMMGec2OHQ0+3utpabLTpk2y/YYNcuahQ9Jq\nteo11AuOBpRQtsqcvO77uNrh4eHBzJkzeeaZZxx6vaObfsfFxZFaUUrogOjoaEwmEyEhIXTu3BmA\nNjX2RN2zB379FWbNAlufZo+lpHD/7beTWVxMQFBQtQVO2dnZlcesyJsWnQnhqUeXE3tZNPdOG2pz\nMsBd1xcN9PPj9a5d+WdaGsUxMczs0IFx5Z+U1GrXplc1xRLk6dnoFMtDnTrxUHn75taoVQZ5t6XD\npt+2dOkSwSuvtCc8/GGEgH//O4A777y52msWLQIPD3jgARsHyM8n7qWXSPXxgR9+0KKyn59W5QKE\nhISUvyyfoKAg9uz7itiBMVwzZiofL91MRGQgo6+rviNL1aqXdevcrxV6tcDgrlejFmpsYCDPpaby\nXlYWYSZT60yx6KhV5uTr88cff1TmuNesWUNaWhpQT4sDHTRVeeeXXz5Fr17p5OUNo6zsbnr2PMHy\n5XdXfr2gAJYuhRtvhI62zl3PDObYsWMBeO+991i2bBn7DqzhpptHcv2NlwCQmlI9n9qs1hc1YPWY\nvcU3LX1Rjl7fX8UnqTcyMnj00CFmRkQwTlU2NZi6k7eh6qrXqVVKTUaOHFnnClhbql4wDh06hNls\npsMF3uSitLQ9WnGIPwZDGAC5uee76S9ZogX66dPtHKCe2suBAwfy+uuv889//hNPjwAeuP95Lrt0\nOKu/2wVAZFT1ZcDNphV6lRrMRV9+ybzMTIozM5nWsaPdkr6KypB50dGEmUxM/uMP+vn6Emmx2Hy+\npZRl2vu+G/r9tfYUi56EK+4mYmNjZUJCwgU/ryvUDASOXCTylkH+Z/Zz8s46c+Ykn356EVFRR7Fa\nIS2tLSNG7CQ8PLLxB68hI/0kr8z/noz0E1gsJq64qhtTpw3FaGyGHxrXroXhw9kWE0Psf/7DvP/8\nh7AhQ5jcsydf9O5tM4A9m5LCc6mp5FxxBYGenrRZv55xwcF0tlhsPv9BjTYazZW977ulfH/uQgix\nTUrp1K456k6+iTl7Ea256bfwBGNA48Zw6tRyoqKOEhX1IhZLFAbDRJ57rg/ffOPN1KlTeeGFFzDU\ntUGFEzp28mfBa3fociyXK/8E83VKCqSmMvWDD7TFUevX210cVTkJHRSEMJnwXbqU7OJivMr/+7p7\n7X1DFyGpRUfuqxneXrVszm767YiMdPj847/w1CNePP5/mRxNj2L48D7861//4qWXXuLTTz9t/Enc\nRQOaodWXS3YmgIVYrQDkb9qEnDCBAikJOXGiWSzKacwipObw/bVWKsi7GWc2/XbEubPFvPWGAU/P\nIMbf8SZDhi/h4KES+vZ9gfHjxwPotsm2W3CyGVpFYOvv60uJlDyfmsqEvXurBXpnAtjYiy4C4D0/\nP5aNHs1ZLy+uLyhoFotyGrMIqTl8f62VSte0IFZrEfv23U9u7jdIWUa7dsM5cXwOeXnneOxvU+nV\nexYfffQRz86+k5ju2Zw7p7VCqJgYdupcRVb23b+P3G9ykWWSdsPb0fPDnnj4ufhHqn9/7QFaM7Q3\n36yztr0isH2Vm8s/oqJ49vBhPs/JYUWVdIwzJX2VNfapqRRLycxVqxg3ezbCx+d87b3VardiRK+e\nLQ3RmJRLtbUFdXx/yoWngrwby8x8n337qm9DGBp6Dz162O5Jc+LEarKzPyQiYiYmUwcOHnyIw8kj\nAFj6wUYyj54iMjKQMaNvZuLEifj4+GCxWIiIiHB6bCdWnyD7w2wiZkZg6mDi4EMHyXovi04P110R\nkZKcw7tvrSElOQcfHzOPPDGanr2boCWog7XtVYPYvR068Ep6OsdLSqrl3GsGsD+nlvHTB9/wfamV\nkddcxO13DqoWiB9q04aHHnkE0tO1RQDlrSfqqxjRu0LFWY1dhKQqYtyTSte4sfbtJzBoUBqBgWms\nWKHVpR8+vJyffvLj999vpLS0enG5xRKNECZMphAsls4AtGljBiCmeyiPPXUde3Zn0K/PzWzdupUF\nCxZQUlLC3Xff7fTYLNEWhElgCjFh6WwBwNjGWNmvpuYjJTmHc2eLef7ZFQA2t+vTjRO17VWDmK/R\nSEFZGZ5C1LqDfahTJ9Iuv5xNIV3J/nw3o8dezF1TB/P58t/YuvnQ+Rc2YhGAq9viqpRLy6SCvBsz\nGr2xWDpRUtKJa6/9LwDJyQ/x73+/SG7u12RlvVft9V5e3QgIuJaDBx9m9+4baNt2MIOH3oaHhwEP\nDyMmkxEhYOPG9QwePJjXXnuNJUuWMGiQnR1U6uDVzYuAawM4+PBBdt+wm7aD2xI6JRSAkdcMBmDY\n1ZcSGHo33/88lYOHAtiWkELeqXPcOeVKOkcFM/CyaKK7tm/kf6UanAyyY6sEscVZWZy1WrGC3TvY\n+K3JAIwY2Zshw7pjsXhWPgc0rGl/ubrSJRdiIZVahNQyqXTNBZR2U/V/h7wMpuj639e9+x7y8/cA\nBiIjw8jK6gyA0Vi9/0xW1vvk5n5dWSqZlDSRwMD/MuP/rufjpZv5/tud9O0XwfSH78Xf/+1GfS9Z\n72eR+3UuUS9GYYmykDQxibRXtJXBmzZsBWDDrwl4eu6he9doTp4cymmDVhtakTrqHBXEn2eMpH2I\nrQbvdSvYUcCBGQc4vf00Hu086LW8F+2uauf0SquBfn482qkT/0pP58nkZG4IDOTr3Nzzd7B798Id\nd8D+/eDtTd7ovwK+eHl7IoTAYvHk1Kmz5w/YkKb95eylSy5kGkelXFoeFeQvsHZTwat8XwtjO8fe\nk5GxCCE88PUdDjzM3LmCNm0GExo6pdrrhNA+mBkMXhgMWgqluDiDwUO7M3ho91rHLTlZQuLliRQe\nLsToZSTgugC6v9sdo8VY75iEQctBG7wMGCzaeYszirn/T8Po0SuMjz/cTEJ8Cqfy2xPd+XfMnoH4\neGtjiukeyp13Xcnsp79g2ZKN/PXx0Y79hyhXWlDKrmt24dXNi/6b+2vj9y4fcwOC7IKuXYm0WPhn\nWhpb8vPP38EWFWklmPv2gcEAbdrQ9rcNEHMtZ88W4+dn5Ny5Ytq106fxjr0J3qppHLWJieIsla5p\nYvPnzycsLIzQUC2VkfeJ5NgTkP+5Y+8vLS0gO3spFksfCgp+YvnyFwkO/oiCgvWkpb1S7bUhIZMJ\nDr6Nw4dnk5Q0iXbtRtCpU+0+6xWEpyB6bjQDdw+kw30dOLbsGCdWOdZlMWRyCMG3BXN49mGSJiXR\nbkQ7SidYWP/rPmY+/ikHDmiLgs6c8QIgM+M4fS+JqJE6qr1dnyNyV+VScqyE6Jei8e3rS9ANQbTp\n36b+N9ahIueefeWVzI2O1iZSV6+G776DRx6BefPg8GFis/cAsObnvaxbu4+iolJiL7WxsTnOl+zb\nS5eohUZKY6g7+Sa0YcMGnngYQ/H8AAAgAElEQVTiCebOnUtkZCRPP/Mgtz5xA8OCriVvGXhGQJt6\nmhpmZy+hrKyAH34YzpAh27ntNi88Pc/fpVdlNHrRu/cnDo/Pw9eD4HHa3aA5wowwC7xivBx6r9HL\nSO9Pelf++9zZYv5072K8vE3cNG4QSz7Yj9nzLJdfXkjyQQgJDaJ9ez9m/F9cldRReLXt+hxVlFoE\nQPJTyZw7cA7fi32JeScGr86Ojd1h0dFa3+WQECi/a+5qLuLeuy9n5bc7KS0t45bxAxl0RVebb68o\n2R89GhYu1Er2R4/W9jixx1a6RO/Wu0rrooJ8E9qyZQsAN998M126dGHSpEnITQWMfVcL8iWH6z9G\nx47TOXBgOnPnnqO0NINLL51NevoZDAYPjh59h3PnkunZ80M8PJzPawOcWn+KXXG7sBZa8Y/zxxJl\nadBxtiWkcPp0EW38vPhs+SY8jRKrVZC05yjpmX3Z8Xsfbr6VWqmjvXu11Hl5ypt77oH58+s+l0eg\n9mPrN8iP6Jei2TFiBykzU+j1Ua8Gjd2ubt3g2mvh4fIVaSYTrF/PmJgYxoy7tN63O1myb5dqvas0\nhgryTSgsTOv4uHvVbvKWnOO3Lknkf5tN6vTjeBCEZ2fHjjNsGBQVeQGfcPz4V+zefVO1WvisrPfo\n1KlhS2PbxLZhwPYB5Hyew+FZh8lanEWnvzg/8ZZzTJtU9WvrxZkzRQ5NqqYk5/CfRWvoFplDv95m\nPCyjWbCgY713uwGjAhCeAoNJmw8QQmDwaoLM4/vvw9dfQ6dOWrXMmTNay84nnrCzG7htjW1HrxYa\nKY2hcvJNaPz48YwePZqnH3+a5ekfUxBeRpfBVyIy/PDsU4jvNc4f01YtfM0qG0cV7Cggb2MeBpMB\no482cWnwbtiPRJs25ydVH3vqOnbvSmfZko12X19RM+/rA/NfncD0v4zgssu0mvn67nYtkRZ6fNCD\nY58eY8eIHfiP8idqru28eKNUNG1LT9cCPMDcuQ6XREKD2tHbZHPOQFEcoO7km9isWbMwzjaSmJhI\n3IyL+fX5XymZWUKve3shjM6nRqrWwoOgbdvaVTaOKjlWwr7791GcWYxHgAdh08Mqa92d5eykakXN\n/GNPXYeU8PmnCez/I4frrzHTJXo0UPcq2JCJIYRM1KEPc10mT9b63qxeDaWlcNll8MEH2p29A6q0\no+fLL8+X7DvxIUBRGk0FeZ0cOTKf9PRXkNJKhw5TiYp6geLiYu68804yMjKIjo7mw7c+xPS6CY+u\nHgSOqTunemT+EdJfSUdaJR2mdiDqhSiEQdishU9Le4WIiMecHnNAXACXp17e0G+5GmcnVSvSO0sW\nb+DggSzKykzsSx7DP/4haeun/ypYu3X1dfHygk8cn8iuqdlsjqK0aCrI6+DUqQ0kJz9BVNRcLJZI\nkpIm4ePTl5CQ20lO1lZDluaVsjNuJ0W5RVyy7pLzdd22jrfhFMlPJBM1NwpLpIWkSUn49PUh5PYQ\nu7Xw7sBePb4tFekdL28LUoIQJdw49g/6Dxjd6Dvd71ftZOXnCZSW95a59YZY+3X1TagR66IURTe6\n5OSFENcKIfYJIQ4KIZ7S45jNSX6+VkUTFHQzwcFa+94TJ8637y3NL2XnqJ2cO3COnst6IsyC0vxS\n+8fboi3DD7o5iODx2gRbRf26s7Xw7qoivZN7vKT8GcnePYe4/dYv+cdLDd/w9dDBbN59a2213jL/\ne2un7nX1itJcNDrICyGMwCJgNNALmCiE0LmWzb2ZzVoVzenTOzl9WmvfW1Jyvn1vQWIBBfEFlJ4s\nZefwnWwJ30Lay2n2jxemNRU7vfM0p3ee1o6XqwXDilr4wYNPMWTIafr1+x8WS/Nbhl6R3inIL794\nhfrxt1mj6RCSTnCA/Qnb+tjqLbN93xFAq6vf2H6jdsE9fK6uwyhKi6FHuuZS4KCUMhlACPEJcCOw\nV4djNwvBwePJzl5KUtJEDAYfDAYLZvP59r3+w/wZJoc5frzxwWQvzSZpYhIGH61M0BxhboKRN46t\n/vXO1OwPHtqd7j078NADH3Dl4BgCA30avAq2Ql55H5khQz3Zv19w9WBPDp0t5nIuQF29orghPdI1\nHYGqt6Xp2CiNEEJME0IkCCEScnJydDite4mMnEX//lvp0mUBVmsJoaF3N+54syLpv7U/XRZ0wVpi\nJfTuhlW9NKWK/vVhYQ8SFWW7M2Z9Ku7oN204wOynv2zwKtgKbcv7yNx+WzHx8RKTuZh9GW2RHheg\nrr4O36/ayQP3/Jd7J7/Dx0s3N0kXSUWxRY87eVsFu7V+gqWUbwNvA8TGxraon3Api0lKupOiogy8\nvKLp2XMJbds637638njFkqQ7kyjKKMIr2oueS3rSdlBbHUesD71q9p2ZsK1P7MAoPvvkN3rE7OX4\nMV+QpSQf60rBdD+OfZpC+hvpTVdXb0fFPMHku6/EP8CX11/+gajo4Mp2CDUnimtuQqIojaFHkE8H\nwqv8uxNwVIfjNhtGow+DBiXX/0JHj+djZFBywy8SF4qeNft66RoTyr3ThrLyy22UFJdxIm8g3j5d\nGfmiwPvVJq6rt6PqPEEbPwtv//sX4rcmM+iKrhz6cQvvvrWVyQe+x58iXj91U7ULgKI0lh6fWeOB\nbkKIKCGECbgd+FqH4ypurmrNfs+eH5GXV7szpiuMub4f81+9l70Hp7H/0BWsXi0avNJUDxXzBLZ6\n0MfvygRgxIf/YMjwnlhKi4hf2fCJZ0VfF2KzlqbW6Dt5KWWpEGIG8ANgBBZLKfc0emStmJhT/aP6\n9ge20y+0n+7nKUgsYFvsNpAwpGQIBg/nrvl61ezrna5wt5WmFfMEtnrQ53lpg/LqdxFi5NVY3trL\nqTxV+eMOXL3nrl50mX2SUn4npYyRUnaRUs7V45it3ctxL5P21zTS/ppG7+De9b+hAQ4+chBhangw\n1aNm31Zde7U9UxugETvwNYnYgVr+31YP+soLQFYucs4czpm8aNfV+Y3VFf25es9dvagVr25qzq9z\nWLB5ATfE3MDro1/X/fhJU5LI25CH8NSCvLTa/hia+X4m++7ZV+250HtC6bG4h9P9622pK1/dUO62\n0rTqPEHNHvQVE8Vr7noSfxlCkcGT2Cu6uXjECtS9525zooK8G1o0ZhFXhl/Jt/u/5Zk1z3BR+4uY\nful03Y5/cu1JspdkE3x7MEUZReSvzyfnsxxC76xdptl+Qnv8R/oDcHzFcQ7+5SD+o/x1G0tFvtr/\n5TZYDWWMKX2OtGxf5w+0aJG2e1NxMUybpvX2daMKlTHX92PM9bVTbl1Dvbk3P56V5hhKew3kliFd\nGHSRzpubKw3SUjZrUUHeDT048EEAugV245k1z7Are5eux894XcubR86M5Mi8I+STz4lVJ2wGeaO3\nsbLPS84XOXiGeFbuJqWHinTFS4PnM3HgrTxx71d0bG87yK1dWz1oDxiwnTZt+sG2bTBjhhbkw8K0\n7pH9+sEtt+g2ziaTmMiYdcuobDP/KZCjupi5g5ayWYsK8m5m29FtrDm8huu6XceqA1r/m74hfXU9\nR9nZMgAS+iZUPnfs02N1rgA9s+cMeb/mETkrEoNJv4VEFemKpSt/ZtmP39G1aCz9B3a2+/ouXV6u\n7A9kMpWXRH5dXsw1dSopeVbever/SHnvMD5fvcsjE3rS8+npzm09dSG5W25JqdRSNmtRQd7N+Jp8\n+ej3j5i1Zha+Jl8ejH2QB2If0PUc3f7djT8m/0H+pnytHqoMgm4MqvM9GYsyEB6CsAfCdB1L15hQ\nYq414Lf1es7mnGN36I/sNBkZTA+brz98eA5paQsICrqBrl3L5yqytU3Dz3mYeX72x3QwGnmxZDM5\nD87DnJNe70arKck5vPvWGlKSc/DxMfPIE6Pp2bvufvZK62Brz93mRgV5N9M9qDuJDyQ26Tks4Ra6\nLOiCMAoKErU+6+GPh9t9fWlBKdlLswm8MRBzR/176Lw0/SGYDmdLzuLz4iP8fsz2L1W3boto2/ZK\ncnO/JSXlGXx8LqJjx+naRtvAtg1/aBuR7P+ezqNi6XxZNBANY4doB7Cx0WrFDlUdOrTjxfkTyDlW\ngNmsfz97RXEVFeR1kJn5Pvv23VPtudDQe+jRY7GLRlQ3Z9smZC/JpqygjI7T9b+7dSY91bGjNlfh\n5dWNlJRnOH26fK5i7Fh47jlyflgHeLA0aiSZZ7vSedaX5/eZtbPRatUdqjpHBdM5qvl9HFeUuqgg\nr4P27Sfg7z8SgOPHV3Dw4F/w9x91QcewN2cvd3xxB/tz9+Pt6c09/e5hfpzt3LOzbRM6Tu/YJAEe\nHE9PFRRs4+TJNQQGXkdurnYx8PUtvxgMHAivv06bd7+HiGuIiQnlzkduZvYzX7JsyUb+Ou2K8xut\nrltXbaPVih2qln6wkcyjpxzagFxRmhMV5HVgNHpjNGqBIyfnCzw9QwgOHndBx1BYWsjkvpMZ3W00\nC39byILNCxjdbTQjokbU/2YXcjQ9ZTT6cuzYRxw+PAuj0ZewsAfp0KHKxeChh+h72xQ8HvgAj2FD\nMJm12maTkHUuf626Afmdd13J7Ke/0C4Mj49uku/XnajGaK2DCvI6OnNmD3l5vxIZOQuDwX497ey1\ns5nz65xqz93T7x4W39jw9E7/Dv3p36E/AFdHXc2bCW9y4tyJet7VfHh7dyc2tu6LQfv2ftx302A+\n+mAz336SSN9Lw7mjp2edG606uwF5S1FfZ0yl5biwTbWbsczM91m7VlR7zP7cm9AFocz830ys0kpG\nxiKE8CAsrO5qmF9SfsFs1CYwX4nTGnqNitYnvZNXmMe7S9/l7SVv035gezZ13MSpDad0OXZzEPSe\n5O5NvfjT6j7MnHUD/teN0koUqz6q1KDr3c/enh074KqrwMcHOnaEDRt0P4VTbO2gVfGc0rK0/FsW\nnVTNu/92YAHW3NcIC76ef8XcwKQVk7g4uBtheUsJDLwRs9l+/npF0grS8tO4qcdNLN+znBV/rCDE\nJ4RxvRqf3skrzGPsu2N57I3HCO4dTN8VfXXftNqdyw1zVuRQlFpE0E1B5Cx3fGMaPfvZ21JQANdc\nA926webNcPgwLu2KCXV3xlRaFhXkHVQ175534htKiuGqi2fSNagnk1ZM4lD6m4R4F2glfXaUlJXw\n5M9PMm/kPL478B0A646sY9aQWZiMjVsunV+Uz6gPRxGyKYS2p9sSPDsYa3crQX3rrn93hjuXG1pL\nrCQ/mUz0vGhyv8ut/w0X0KpVcOwYfP459O2rPVytrs6YSsuigryTzpzZQxuZzJJMGLf5fC+Sf/9x\nlJmP1L1y8Z3Edwj0DuSWnrdUlgsahZGJnf1rLdl3tgQzMTOR+KPx3J5zOwA/TPuBmIIYQmJDiHkn\nBq/OXgAcmX+E9FfSkVZJh6kdiHohCmFwbLLNncsNM9/JxDPQk6BbgshdVR7ky3CLn/DUVO3Pp56C\n0/k7iY5MoK2flWvGuG6ys7Ix2s978Q/wrdYZU2lZ3OBXoHnJyFgEwoNc46XAJkxGE8VlxfQIsr1C\ns6r9ufvZkr4Fz+er3/3GRDxAVAdtqX5DSzCHdR6GfFZy9N2j7P95P9eOv5agG4OqbVp9asMpkp9I\nJmpuFJZIC0mTkvDp60PI7Y7tmOTO5YZn958lf0s+6zzXVT63IXADQ04PceGoNBXtTi7pl03mkbXs\n+eNKLu7ny+fLXTfZWVdnTEcsyshg3pEjFFutTAsLY07nzqoyx02piVcnlJYWkJ29lMCA63lq6AK2\n3reVyLaRADw79Nl63//o5Y8Sf3888ffHc1HwRQAsHL0Qo9Ebi6UTFkunRpdgBowKQHja3rQ6f0s+\nAEE3BxE8XrsLP7HK8QqcquWGjz11Hbt3pbNsSRPsYrR3r9ZgzNsbgoLg8cfrfUv4o+H0j+9P//j+\nBI7Vomq/tfpvtNIQo0aBpycUndMmNtMyeuPTxvWTnWOu78fb793L4g+nceddVzgcpCs205jRsSML\nunTh+dRUVjTDPuuthbqTd0J29hLKygoICr2PGz+6k/T8dEqsJdzU4yYGRw6u9fr3d7zPPV9VXwlb\nUSr5+4O/13q9oyWYdbFEWujxQQ9Snqm9abU5TKvoOb3zNGWntSZlJbklDh/7gpUbFhbW22+mJku4\nBUu4dhHq800f/cfUCJGR8MEH8NbCswQFwNBhnrz4ouDpx5vnZGfVzTQCPT350/79fHX8eLPbMam1\nUEHeCR07Tq+cWE1+OJkHVz3IO4nvsHD0Qpuvn9B7AiOjtYqcFUkr+Mvqv9RZKuloCWZ9QiaGEDLx\nfAqmILGAzWGbQYL/Nf4kTUzC4KPd6ZsjHO9FU1Fu+PHSzXz/7c46yw3P7D3D3jv2cm7/OQzeBjrc\n04Eu87s4dqL+/bUH2Ow30xxNnAjC6s1nn8DHHzfvyc6WsplGa6GCfAMVFBWwdNdSbux+Ix39bJcQ\nent64+2p/RJ/kfRFnaWSlamgekowG6Jimz9ZJIl8OpKo56IqG5OF3l27h7wtVfeDXVhyl939YAt2\naMct2FaAwWQg5j8x5G/OJ21BGgGjA/Af4cSGI3b6zTRXLWWys6VsptFaqCDfQEt2LqGguIDpA+vf\nsWnPsT38mvprnaWSFamgukowG6Jm7XjSXUkUHy12qDFZVVUvFPaUFpSy65pdeHXzYsDWARQeLsTc\nyYzR28jRN49ScsLx1BB5eXb7zTRXjZ3sdBctZTON1kJIF2xYEBsbKxMSEup/YQtRkdY5/PBhu3f9\nTcFaYiW+dzxRL0SR+10u2R9kM6RkiN27cHtyVuRw6JFDtLmsDTnLc+weI/uTbJImJtFvXT/aDW4H\nQGleKdsHb8d6zkrszljHFmbl58PIkef7zXTtqvWa8XN9FY+ieSM9vXIzjfs6dOCFqChVXXMBCCG2\nSSljnXmPupPX2ZEj80lPfwUprXToMJWgsCdtpnV2/rqZb99aUu29fYdezvV/uku3sehRO+7MIqOi\n1CIAkp9K5tyBc/j09qHkZAkluSVcsu4Sx1feJibW2W9Gcb2WsJlGa6GCvA4qqmgu8oM3LoF3U6B7\nyBAGl7zExqxMm2mdXoMGEHWRVlu/L34HP37wKdF9euo6Lj1qx525UHgEak/6DfIj8plIfh/zO8Ik\n6PtDX4RZUJpfioefAz9yaks8RdGNCvI6qKiiOZn9FrkZc1l/HK4bcB+cWEesfyny2doBy9NswtOs\n5ef/+G07Pm396HHZJbVeV/OTQVTUCwjhWLol/NFwQiZpVTapc1LJ/TbX6dpxZy4UR/0PsvH25XAU\nWALcDu2To5DDte8/8tlIomY3v4lGRWnOVJDXQUUVjee5XuRmQP+AtsRFdOH3E1BSUneKIyftKEeS\nDnDVLWMwengwf+N8XtnyClZp5ZFLRnGpcSlRUXOxWCJJSpqEj09fQkJud2hcetSOO3OhuHjsIALy\nQol/NoFC35Ok99vNgFlX0H/sVQ06t6IojaeCvI5y6MWWXHi4Sx57dsVhMFgwmyPqfE/Cj79iMBq4\n5OrBbDiygSd+foK5I+YS2TaSr+MncWkXCAq6GS+vLiQlTeLEiVUOB3k9OHOh8DSb2Hn5Hp567Glu\nP3g18mQJveOcmiNSFEVnqq2Bjt5MeJOP0oyEd/+GLl0WYLWWEBp6t93XF50rZPfG34gZcDF+Ae3Y\nkr4FgJt73Mz43uPJLV9fcvr0Tk6f3gnU/8nAlSq6bD538d/xPe5JQru9GD3UfYSiuFKjfgOFEPOB\n64Fi4BBwj5Sy9exQUUVBUQGf7v6Id2PNpO8fh5dXND17LqFtW/t7qf6+fgvF5woZEDcUgLA2YQDs\nzN7J6eLTrM2BiVHBkDQRg8HHoU8GrlTRZTPwkIlUIfmtXRJl1jI8DCrQK4qrNPa37yfgb1LKUiHE\nPOBvwJONH1bzs2TnEo4XnsYv+heGRg136D2xccOIjRtW+e/xvcazdNdSJn4xER9PHyweZpKtVzC+\n/0wKChI5cGBGnZ8M9FJQkMi2bbGAZMiQEgwOBun9uftJTN3G5kO/cNA3jQLPMwT+M5DTM0837YAV\nRbFLt8VQQoibgVullHfW99rWthjKUSVlJSQcTcBoMJKYmchjq6ezalgolB3HyyuayMhZhITc0eTj\n2L59GPn5W5CyyKkgn5aXRvwPa0hasZm9V+Tw0YkviL8/ntgw1+blq7ZkaMhisOZObdjdcrh6MdRU\nYLm9LwohpgHTACIi3Dfl4ErFZcXc+eWdZBRkEO0fzds3fsjQPk0f1KvKyVlBUVEqQUE3kZNj93+n\nTeFtwwmfcBdM0BZ0LWuKATaAIy0ZWiq1YbdSb5AXQvwM2Opi9bSU8qvy1zwNlFLH77WU8m3gbdDu\n5Bs02hbOx+RD8sOu6y9utZaQnPwk0dHzyM39zmXj0FND931tKapu2N3Gz8Lb//6F+K3JKsi3IvUG\neSnlyLq+LoSYAowFrpauaISj6CYz8x08PQMJCrqF3NxV5c+6yR56DeDO+75eKGrDbqWx1TXXok20\nDpVSqp8cF9GrD87Zs/vJz9/CunXntyfcsCGQIUOa58SpO+/7eqGoDbuVxv64LwTMwE/lEzlbpJR/\navSoWom6do5yhl59cMLDHyUkZBIAqalzyM39ln791jp9nMbSa6LUnfd9vVBaSg97peEaFeSllCqx\n1wjO7hxlj6N9cOpjsYRjsYQD0KfPN06/vyartYh9++4nN/cbpCyjXbvh9Oz5IR4edbcM1muiVI/e\nPc1dS+lhrzRcK/rg6n6c2TnKETX74LjaiROryc7+kIiImZhMHTh48CGyst6jU6eH7b5Hz4lSd973\n9UIac30/xlzfui5uynmtq2DYTVXsHDVtwDS7O0c5omofHHdgsUQjhAmTKQSLpTMARmMbu6+vOlFq\nsNT/o5mYmYhhjgExR7Brdyn9+mkbSAUFweOP6/VdKErzpoK8G1gUvwgPgwcPDGj4Bt41++C4Ay+v\nbgQEXMvBgw+ze/cNtG07mNDQKXZfX3WilIpMTZn94z/ywyOVF8XCQpg8GRISYMIEWLAAfvlFx29G\nUZopFeRdzJENwR1Rsw+OO8jKep/c3K+JinqRnj0/Ii9vPWlpr9h9fdWJ0uwl2YA2UWrLiqQVpOal\nclOPmwDo3x8efRR69YKrr9Zec+KEvt+PojRHrk/ctnLObAhel5p9cNxBxeYmBoMXBoOWGy8uzrD7\nekcnSiu6Xc4bOY/vDlRftJWXB3PmaNvCjhmj13eiKM2XCvIuNv3S6Uy/tHEB3l2FhEzm5MlfOHx4\nNlKW0q7dCDp1etTu6x2dKK3odnlLz1tYdUBbtFVmLeNMgQdxcZCbC+vWafl5RWntVJBvQrYXKQ3i\n+j/Zz0vrITEzkdi3Y5FISmaV2Gz1eyE2Ejcavejd+xPdjldhf+5+tqRvwfP584u2Av8ZSK+Vpzl4\nEL78EsxmyM8Hv7qrNRWlxVM5+SZ0qmMR/+zyIdzVgYBR0QBk+efZfO2RI/PZtCmMjRtDSU6eiZTW\nBp+36oSkPb0GDeChhS/y0MIXiZsyAUD3jcSbyqOXP0r8/fHE3x/P2JixAPyrz1ri4+HkSRg+HMLD\n4eWXXTxQRXED6k6+CcUfSyDf8wy3xI4n/t/fkWo8yx/GeO6v8bpTpzaQnPxEg/dyrarqhOTyPfa7\nSNZcQIW3kWs23UTp5jKmXjKVF0a8gMHBDcMvtPC24YS31RZtfTPx/KKtB1TnJEWpRQX5JlSx01P8\n7k2k/XGQhMC9mIqCa70uP1/b9i97X3d+eu9n4E9s5FfgV6dSKHVNSNpTsYBqTWACDw6aTmTbSCat\nmETfkL7cfpH9i0xr79GuKM2F+s1sQuN7jWd019F8/ukHlGFlV1AyEW1r99I3m7WLQceehdzzj9uI\nvfNDLhql1f+VWt5wOIVTdUJSlheal1nrKDRHW0CFAX5rl1S5tyxQOaFZoaAgkbVrDaxdK7BaSytb\nDyiK4t7UnXwT+9ulT7Hxp88xdvPmhCGPu/vdXes1wcHjyc5eyoFDkzAYfPDyKyNlvQ+eXme5ePBN\n+Ph2diiFY29C0t72exULqLy7BVIgzlTuLQuQezaXI0fmk57+ClJaMRhMgCdQzPGvWnePdkVpTlSQ\nb0LFZcX8Y/EsrijqxWrzryy5YQmDOtne2DsychadO8+moCCRnVtnkXvETKf+CYSEPoWXVxeSkiZx\n4sSqakG+ZoVMMPDewH9x0e1DeOSHR1h/ZD0xOZ2YO/HP1c5VkQKqWEB187j7+GlXYpW9ZS309/es\nnCfYtzWT+BWlle/fyHPETLiEi7Ldo32Coij2qSDfhHxMPqx66VcAnq7jdVIWk5R0J0VFGXh5RVN4\n9CGEIYvQXkmcPr2TsjLt7rqkpPrGF7ZaDA+8bDC9w2IxCANmo5ndfof4eeZ6PAwetdoQVyygKikr\nYVa7WcweNpvEzERmfDeDa8MjKM2FwMCx+HQYT+ydGZjNERzdZyRl41X0GNsP3i0fSCvr0a4ozYn6\n1XQDRqMPgwZp27QVnSvk17f+RsyAvnQIH0JS0kQMBh8MBgtmc/V8vr0WwzUrbPwC/fEweNRqQ2yr\nVv5g+0yW3LeEbu0hKXch6emvYrKYMJedwWTKJzd5AJ6FZnKGFWCwavvE1OzRLuZUz9Vvf2A7/UJV\nF0RFcQUV5N1MZQ+aUYMJiLi4MoVz4MAMQkPvrvZaW0F61TtLebL0xVoVNrbaENv6JPDYhKfp3Wcg\nVmsJ2dlLycp6r/IYp7LOkp8ZRvgV8cQ+/VydrQdejnu5chI3xCdEl/829r5nvRdxKUpLooK8m6lI\noZSVnSE+vk9lCqdnzyW0bVs9n18RpNd88hV7Nv6GlJJk36MEFtde8m+rDXF9m41ERs4iLOzP5OVt\nIi1tPrkHRiIMZYyc8CJ+kX51th6Y8+scFmxewA0xN/D66Nd1+++j1y5YitJaqCDvpqqmcOzxNJuw\nWq3s37YTi68PBoOBw2XbgjMAAAq6SURBVAHZbEmoXmHT4aUQ/pZyj902xLbu8mvOE3SJWkz8ku10\nj+1JWGTdnS4XjVnEleFX8u3+b3lmzTNc1P4i3frz6LULlqK0FirIN3MV6Z0KwUvhBbRtdo+Fn+F1\nnw95t/vrJO3dbLcNsa27/JoXmYQf11J8zv4xqnpw4IMAdAvsxjNrnmFX9i6g9gKq3zdubXDqxd12\nwVIUd6V+O5q52Lhh5KRlsmPNBqbMeRzfdm0r0xjTbnyI164sD6ITbAdORzcbcbSV8baj21hzeA3X\ndbuuMl3UN6QvUHvv1sakXtxtFyxFcVcqyDdzVYN0Tnom7z0zr/JrKxcuJvn3pDrvjPXebMTX5MtH\nv3/ErDWz8DX58mDsgzwQ+4DNvVsbmnpxx12wFMVdqSDfzFUN0h27RuEX6M9Hc18jum8vknftrffO\nWO/NRroHdSfxgcRqz1XduzX3u9xa73E29eKOu2ApirtSQb6Zqxmk/9i6HYPRQOHZc002KelsGWPV\nvVtzV5UH+SoLqJxNvbjjLliK4q5UkG9BKtIYkb1iSPn9jyablHQ2l15179YKFQuoVOpFUZqWCvIt\nSEUaw8PThMFoIKTHbjZtegAprXToMJWoqBcq911tjKq59IQftbYNKxcuZuXCxUDtu/q69m5VqRdF\naVoqyDdT9lImjy1+hden/42ovh3Jyp2py0YkVW3+5kd+++4XpJR069+HE5nZDLx2OIPGjrJ7V1/X\n3q0q9aIoTUsF+WbKXsqk4s44emAZZ4GgoJvtdrF0VtofB/nloxUMu+0G2gYF8tWi9xAGwaDr4/AL\naKcWJymKG9IlyAshHgPmA8FSyuN6HFOpm73yQ6OHB7Fxw8jO/oikJOrsYumsjIMpAHQf2A9vvzYA\ntPFvh19AO7U4SVHcVKN/G4UQ4cAo4Ejjh6M4y15wrdiIpK4uls7y9W8LQHZqOlkpadpz7bTnnKmQ\nScxMJPbtWCSSklkleBjURUFRmooe2/+9AjwBqG2UXaCu4BoZOYv+/bfSpcsCrNaSWl0sndXzsgF0\n6deblW8sZttP6/Dw9CSkc3i9FTKJmYkY5hgQcwSl1lIe+eERTEZTo8aiKIpjGnULJYS4AciQUu4U\nQu33eaHVFVxrNhiz1cWyIa66eQyDx40lK+UIP7y/nIuHDqq3QqYiqBeVFbHyj5XVet03hmo7rCj1\nqzfICyF+BkJtfOlpYCYQ58iJhBDTgGkAERGNSxsomrqCqyNdLJ1VVlrKV4sWU3Aij3btg7jhwSl0\n7BZNx27Rditkam5gMvN/M2v1um8o1XZYUepXb5CXUo609bwQog8QBVTcxXcCEoUQl0ops2wc523g\nbYDY2FiV2tHBhS4/NFnMTH/tBYdfX1JWwpM/P1ktqAd4BdTqdd/QnLxqO6wo9WtwTl5K+buUsr2U\nsrOUsjOQDvS3FeCV1umdxHcI9NY2MJHlUzZbM7bi+bwnS3ZqaZbAfwY2+jwVk8+XXH2VquxRlBr0\nmHhVFJv25+5nS/qWakHdYrQQf388Y2PGArD27rWNPo9qO6wo9ul221N+N68olR69/FEm9Z0EaNsB\nfrv/W9ZPXU9sWCzfTPxGl3Oo3jeKUjf12VZpMuFtwwlvGw6gW1CvSfW+UZS6qSCvNGuq942i1E3l\n5BVFUVowFeQVRVFaMBXkFUVRWjAV5BVFUVowFeQVRVFaMBXkFUVRWjAV5BVFUVowFeQVRVFaMBXk\nFUVRWjAV5BVFUVowFeQVRVFaMBXkFUVRWjAV5BVFUVowFeQVRVFaMBXkFUVRWjAV5BVFUVowFeQV\nRVFaMBXkFUVRWjAV5BVFUVowFeQVRVFaMBXkFUVRWjAV5BVFUVowFeQVRVFaMBXkFUVRWjAV5BVF\nUVowFeQVRVFasEYHeSHEQ0KIfUKIPUKIf+oxKEVRFEUfHo15sxBiOHAj0FdKWSSEaK/PsBRFURQ9\nNPZO/s/AP6SURQBSymONH5KiKIqil0bdyQMxwGAhxFygEHhMShlv64VCiGnAtPJ/nhZC7GvkuW0J\nAo43wXGbkhpz02tu44XmN+bmNl5onmPu7uwb6g3yQoifgVAbX3q6/P3+wCBgIPCpECJaSilrvlhK\n+TbwtrMDdIYQIkFKGduU59CbGnPTa27jheY35uY2Xmi+Y3b2PfUGeSnlyDpO+Gfgy/Kg/psQwop2\ndcxxdiCKoiiK/hqbk18JjAAQQsQAJprfxx9FUZQWq7E5+cXAYiHEbqAYmGIrVXMBNWk6qImoMTe9\n5jZeaH5jbm7jhVYyZuHamKwoiqI0JbXiVVEUpQVTQV5RFKUFa7FBXgjxmBBCCiGCXD2W+ggh5gsh\n/hBC7BJCrBBCtHP1mGwRQlxb3sLioBDiKVePpz5CiHAhxBohRFJ5242HXT0mRwghjEKI7UKIb109\nFkcIIdoJIT4v/xlOEkJc7uox1UcI8dfyn4ndQoiPhRCW/2/n7kKsqMM4jn9/uJVpCEUYtiusgVCi\nhRISCRFsgZXsdhMYFEt1E2QvEFQW1G0X0QsU3agluNSFCXnRi5tddKVEWyIllBjosS2D6IW6kKVf\nFzML69k9Z469PXOG5wPLzvzZM/xgZ5+Z/zM7/+hM7STtknSmfOY5O3aZpElJ35TfL606TiOLvKSV\nwK3AyegsPZoE1tq+Fvga2B6cZx5Ji4DXgNuANcDdktbEpqo0Azxu+xqKdzke6oPMAI8Cx6JDnIdX\ngA9sXw1cR82zSxoEHgGut70WWARsjU21oDeBzW1jTwEHba8GDpb7XTWyyAMvAU8AffFU2fYB2zPl\n7iFgKDJPBxuB47ZP2D4LvE2xblFt2Z62PVVu/0ZRfAZjU3UnaQi4A9gRnaUXkpYBNwE7AWyftf1z\nbKqeDAAXSxoAlgDfBeeZx/YnwE9tw2PA7nJ7N3Bn1XEaV+QljQKnbR+JzvI33Q+8Hx1iAYPAqTn7\nLWpeMOeSNAysBw7HJqn0MsUNyp/RQXp0FcXLj2+ULaYdkpZGh+rG9mngBYqZ/jTwi+0Dsal6doXt\naShuYoDKRSH7sshL+qjspbV/jVEst/BsdMZ2FZlnf+YZihbDRFzSjrTAWF/MlCRdArwDPGb71+g8\nnUjaApyx/Vl0lvMwAGwAXre9HvidHloIkco+9hiwCrgSWCrpnthU/51/+jJUiE5LLUhaR/GLOyIJ\nirbHlKSNtr//HyPO0215CABJ48AWYCT4hbJOWsDKOftD1HCK207SBRQFfsL2vug8FTYBo5JuBxYD\nyyTtsV3nAtQCWrZnZ0h7qXmRB24BvrX9I4CkfcCNwJ7QVL35QdIK29OSVgCVK//25Z18J7aP2l5u\ne9j2MMUJuCG6wFeRtBl4Ehi1/Ud0ng4+BVZLWiXpQooHVfuDM3Wl4kq/Ezhm+8XoPFVsb7c9VJ67\nW4GPa17gKf+2TkmaXR1xBPgqMFIvTgI3SFpSniMj1Pxh8Rz7gfFyexx4t+oDfXkn30CvAhcBk+UM\n5JDtB2Mjncv2jKRtwIcU/42wy/aXwbGqbALuBY5K+qIce9r2e4GZmuhhYKK8+J8A7gvO05Xtw5L2\nAlMU7dHPqeESB5LeAm4GLpfUAp4DnqdY7fcBiovVXZXHqWdnIKWU0r+hUe2alFJK58oin1JKDZZF\nPqWUGiyLfEopNVgW+ZRSarAs8iml1GBZ5FNKqcH+AgoevBnmEHtKAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1131dcd10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#显示聚类结果\n",
    "#画出聚类结果，每一类用一种颜色\n",
    "colors = ['b','g','r','k','c','m','y','#e24fff','#524C90','#845868']\n",
    "\n",
    "n_clusters = 10\n",
    "mb_kmeans = MiniBatchKMeans(n_clusters = n_clusters)\n",
    "mb_kmeans.fit(X_train_pca)\n",
    "\n",
    "y_train_pred = mb_kmeans.labels_\n",
    "cents = mb_kmeans.cluster_centers_#质心\n",
    "\n",
    "for i in range(n_clusters):\n",
    "    index = np.nonzero(y_train_pred==i)[0]\n",
    "    x1 = X_train_pca[index,0]\n",
    "    x2 = X_train_pca[index,1]\n",
    "    y_i = y_train[index]\n",
    "    for j in range(len(x1)):\n",
    "        if j < 20:  #每类打印20个\n",
    "            plt.text(x1[j],x2[j],str(int(y_i[j])),color=colors[i],\\\n",
    "                fontdict={'weight': 'bold', 'size': 9})\n",
    "    #plt.scatter(cents[i,0],cents[i,1],marker='x',color=colors[i],linewidths=12)\n",
    "\n",
    "plt.axis([-5,10,-6,6])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "效果并不好，7，9混在一个簇中"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
